package com.base.cn.platform.os.service.course.classes.member;

import com.base.cn.platform.os.entity.classes.condition.ClassesMemberCondition;
import com.base.cn.platform.os.entity.classes.member.ClassesMember;
import com.base.cn.platform.os.service.FeignAuthConfig;
import com.base.cn.platform.os.service.course.CourseBaseService;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 班级成员
 *
 * @author SK
 * @since 2018-05-10
 */
@FeignClient(value = CourseBaseService.appName, configuration = FeignAuthConfig.class)
public interface ClassesMemberService extends CourseBaseService {

    /**
     * 班级成员个人信息统计
     *
     * @param userId 前台用户id
     * @return 个人信息统计
     */
    @RequestMapping(contextPath + "/classesMemberStatistics")
    Map<String, Object> classesMemberStatistics(@RequestParam("userId") BigDecimal userId);

    /**
     * 查询班级成功
     * @param condition 查询条件
     * @return Map<BigDecimal,List<ClassesMember>> 班级ID为Key
     */
    @RequestMapping(contextPath + "/findClassesMemberListMap")
    Map<BigDecimal,List<ClassesMember>> findClassesMemberListMap(@RequestBody ClassesMemberCondition condition);

    /**
     * 查询班级成员
     *
     * @param condition 班级成员查询条件
     *
     * @param setMember 设置成员
     * @param order     排序 1.班主任 -> 管理学员
     * @param identity  1.普通学员 2.班级管理员 3.班主任
     * @return 班级成员列表
     */
    @RequestMapping(contextPath + "/findClassesMemberList")
    List<Map<String, Object>> findClassesMemberList(@RequestBody Map<String, Object> condition,
                                                    @RequestParam("setMember") boolean setMember,
                                                    @RequestParam(value = "order", required = false) Integer order,
                                                    @RequestParam("identity") Integer... identity);

    /**
     * 查询班级成员
     *
     * @param classesMember 班级成员查询条件
     * @param currentPage   当前页
     * @param pageSize      每页数据量
     * @param setMember     设置成员
     * @param order         排序 1.班主任 -> 管理学员
     * @param identity      1.普通学员 2.班级管理员 3.班主任
     * @return 班级成员列表
     */
    @RequestMapping(contextPath + "/findClassesMemberPage")
    Map<String, Object> findClassesMemberPage(@RequestBody Map<String, Object> classesMember,
                                              @RequestParam("currentPage") Integer currentPage,
                                              @RequestParam(value = "pageSize", required = false) Integer pageSize,
                                              @RequestParam("setMember") boolean setMember,
                                              @RequestParam(value = "order", required = false) Integer order,
                                              @RequestParam("identity") Integer... identity);

    /**
     * 是否加入班级
     *
     * @param classesId 班级id
     * @param memberId  班级成员的id
     * @return {@code true}加入，否则返回{@code false}
     */
    @RequestMapping(contextPath + "/joined")
    boolean joined(@RequestParam("classesId") BigDecimal classesId,
                   @RequestParam("memberId") BigDecimal memberId);

    /**
     * 保存班级成员
     *
     * @param classedId 班级id
     * @param memberIds 成员id(用户id)
     * @param identity  1.普通学员 2.班级管理员 3.班主任
     * @param source    请求来源 1.前台(APP H5 WEB) 2.后台
     * @return 保存结果
     */
    @RequestMapping(contextPath + "/saveClassesMemberBatch")
    Map<String, Object> saveClassesMemberBatch(@RequestParam("classesId") BigDecimal classedId,
                                               @RequestParam("memberIds") String memberIds,
                                               @RequestParam("identity") Integer identity,
                                               @RequestParam("source") Integer source);


    /**
     * 更新班级成员状态
     *
     * @param ids    班级成员id
     * @param status 0.申请中 1.正常 2.封禁 3.驳回
     */
    @RequestMapping(contextPath + "/updateClassesMemberStatus")
    Map<String, Object> updateClassesMemberStatus(@RequestParam("ids") String ids,
                                                  @RequestParam("status") Integer status);

    /**
     * 更新班级成员身份
     *
     * @param ids      班级成员id
     * @param identity 1.普通学员 2.班级管理员 3.班主任
     */
    @RequestMapping(contextPath + "/updateClassesMemberIdentity")
    Map<String, Object> updateClassesMemberIdentity(@RequestParam("ids") String ids,
                                                    @RequestParam("identity") Integer identity);

    /**
     * 检测用户是否有购买，且未加入的班级
     * @param userId 用户ID
     * @return true有，false没有
     */
    @RequestMapping(contextPath + "/checkNoJoinClassesMember")
    boolean checkNoJoinClassesMember(@RequestParam("userId") BigDecimal userId);

    /**
     * 删除班主任
     *
     * @param id      班级成员id
     */
    @RequestMapping(contextPath + "/deleteClassTeacher")
    Map<String, Object> deleteClassTeacher(@RequestParam("id") BigDecimal id);

}
